package com.sg.qcgl.app.ball_team.executor;

import com.sg.qcgl.app.ball_team.convertor.BallTeamAssembler;
import com.sg.qcgl.app.ball_team.convertor.BallTeamDTOConvertor;
import com.sg.qcgl.client.ball_team.dto.command.BallTeamAddCmd;
import com.sg.qcgl.client.ball_team.dto.command.BallTeamUpdateCmd;
import com.sg.qcgl.client.ball_team.vo.BallTeamVO;
import com.sg.qcgl.domain.ball_team.gateway.BallTeamGateway;
import com.sg.qcgl.domain.ball_team.model.BallTeam;
import com.sg.qcgl.domain.ball_team.service.BallTeamDomainService;
import com.alibaba.cola.dto.SingleResponse;
import com.alibaba.cola.exception.BizException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class BallTeamCmdExe {

    @Autowired
    private BallTeamGateway ballTeamGateway;

    @Autowired // 自动注入用户领域服务，用于处理用户相关的业务逻辑
    private BallTeamDomainService ballTeamDomainService;

    public BallTeamVO create(BallTeamAddCmd ballTeamAddCmd) {
        BallTeam ballTeamCreateParams = BallTeamAssembler.addCmdToBallTeam(ballTeamAddCmd);

        // 4. 调用领域服务，保存用户信息
        BallTeam ball_team = ballTeamDomainService.create(ballTeamCreateParams);
        return BallTeamDTOConvertor.toVO(ball_team);
    }

    public BallTeamVO update(BallTeamUpdateCmd ballTeamUpdateCmd) {
        // 检查用户名是否存在
        BallTeam ballTeamDb = ballTeamGateway.findById(ballTeamUpdateCmd.getId());
        if (ballTeamDb==null) {
            // 如果用户名不存在，抛出业务异常
            throw new BizException("0001", "用户名不存在");
        }
        // 根据登录账号查找用户信息
        BallTeam ballTeamUpdateParams = BallTeamAssembler.updateCmdToBallTeam(ballTeamUpdateCmd);

        ballTeamDb.updateInfo(ballTeamUpdateParams);

        // 保存更新后的用户信息
        BallTeam ballTeamUpdated = ballTeamDomainService.update(ballTeamDb);
        // 将更新后的用户信息转换为视图对象并返回
        return BallTeamDTOConvertor.toVO(ballTeamUpdated);
    }

    public void delete(Long id) {
        BallTeam ballTeamDb = ballTeamGateway.findById(id);
        if (null==ballTeamDb) {
            // 如果用户名不存在，抛出业务异常
            throw new BizException("0001", "球队信息表信息不存在");
        }
        ballTeamDb.delete();
        // 保存更新后的用户信息
        ballTeamDomainService.update(ballTeamDb);
    }
}
